﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using RDI.Alef;
using RDI.Alef.Exemplo;

namespace ExemploAlef
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        Contexto Contexto = null;

        private Motor<TipoVeiculo, PesquisaTipoVeiculo> DadosTipoVeiculo
        {
            get
            {
                return Motor<TipoVeiculo, PesquisaTipoVeiculo>.Instancia();
            }
        }

        private Motor<Veiculo, PesquisaVeiculo> DadosVeiculo
        {
            get
            {
                return Motor<Veiculo, PesquisaVeiculo>.Instancia();
            }
        }


        public MainWindow()
        {
            InitializeComponent();
        }

        private void btnIniciarContexto_Click(object sender, RoutedEventArgs e)
        {
            Contexto = new Contexto(SGBD.SQLSERVER);
            Contexto.Conexao = new SqlConnection();
            // Data Source=BANE\BANE;Initial Catalog=curso;User Id=sa; password=123456
            txtStringConexaoBD.Text = "Data Source=BANE\\BANE;Initial Catalog=curso;User Id=sa; password=123456";
            Contexto.Conexao.ConnectionString = txtStringConexaoBD.Text;
            Contexto.Conexao.Open();

            MessageBox.Show("Contexto inicializado com sucesso !");
        }

        private void btnIncluirMassaTestes_Click(object sender, RoutedEventArgs e)
        {
            for (Int32 i = 1; i <= 50; i++)
            {
                var tipo = new TipoVeiculo();
                tipo.Codigo = i;
                tipo.Descricao = "Descricao " + i.ToString();
                DadosTipoVeiculo.Salvar(tipo, Contexto);
            }

            var veiculo = new Veiculo();
            veiculo.Placa = "JJJ-9999";
            veiculo.Ano = 1989;
            veiculo.Marca = "Gurgel";
            veiculo.Tipo = DadosTipoVeiculo.Encontrar("17", Contexto);
            DadosVeiculo.Salvar(veiculo, Contexto);

            veiculo = new Veiculo();
            veiculo.Placa = "KKK-1234";
            veiculo.Ano = 1989;
            veiculo.Marca = "Gurgel";
            veiculo.Tipo = DadosTipoVeiculo.Encontrar("23", Contexto);
            DadosVeiculo.Salvar(veiculo, Contexto);


            MessageBox.Show("Registros incluídos com sucesso !");
        }

        private void btnCarregarGrid_Click(object sender, RoutedEventArgs e)
        {
            var listaDados = DadosTipoVeiculo.TodasAsInstancias(Contexto);
            grdDados.DataContext = listaDados;

        }

        private void btnExcluirMassaTestes_Click(object sender, RoutedEventArgs e)
        {
            foreach(TipoVeiculo tipo in grdDados.ItemsSource)
                DadosTipoVeiculo.Excluir(tipo, Contexto);

            foreach (Veiculo veiculo in DadosVeiculo.TodasAsInstancias(Contexto))
                DadosVeiculo.Excluir(veiculo, Contexto);


            MessageBox.Show("Registros excluídos com sucesso !");
        }

        private void btnSumarizar_Click(object sender, RoutedEventArgs e)
        {
            var pqs = new PesquisaTipoVeiculo();
            pqs.ListaSumarios.Add(new Sumarizacao(TipoSumarizacao.Soma, "Codigo", "sum_codigo"));
            var r = DadosTipoVeiculo.Pesquisar(pqs, Contexto).First();
            MessageBox.Show("Soma: " + r.Sumario["sum_codigo"].ToString());

            pqs.ListaSumarios.Clear();
            pqs.ListaSumarios.Add(new Sumarizacao(TipoSumarizacao.Media, "Codigo", "avg_codigo"));
            r = DadosTipoVeiculo.Pesquisar(pqs, Contexto).First();
            MessageBox.Show("Media: " + r.Sumario["avg_codigo"].ToString());

            pqs.ListaSumarios.Clear();
            pqs.ListaSumarios.Add(new Sumarizacao(TipoSumarizacao.Maximo, "Codigo", "max_codigo"));
            r = DadosTipoVeiculo.Pesquisar(pqs, Contexto).First();
            MessageBox.Show("Maximo: " + r.Sumario["max_codigo"].ToString());

            pqs.ListaSumarios.Clear();
            pqs.ListaSumarios.Add(new Sumarizacao(TipoSumarizacao.Minimo, "Codigo", "min_codigo"));
            r = DadosTipoVeiculo.Pesquisar(pqs, Contexto).First();
            MessageBox.Show("Minimo: " + r.Sumario["min_codigo"].ToString());

            pqs.ListaSumarios.Clear();
            pqs.ListaSumarios.Add(new Sumarizacao(TipoSumarizacao.Contagem, "Codigo", "cnt_codigo"));
            r = DadosTipoVeiculo.Pesquisar(pqs, Contexto).First();
            MessageBox.Show("Contagem: " + r.Sumario["cnt_codigo"].ToString());

        }

        private void btnEncontrarAlterar_Click(object sender, RoutedEventArgs e)
        {
            var tipo = DadosTipoVeiculo.Encontrar("17", Contexto);
            tipo.Descricao = "Automovel";
            DadosTipoVeiculo.Salvar(tipo, Contexto);

            tipo = DadosTipoVeiculo.Encontrar("23", Contexto);
            tipo.Descricao = "Aeronave";
            DadosTipoVeiculo.Salvar(tipo, Contexto);

            var psq = new PesquisaTipoVeiculo();
            psq.OrdenarPor("Descricao");

            var r = DadosTipoVeiculo.Pesquisar(psq, Contexto);
            grdDados.DataContext = r;


        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            var amostra = new TipoVeiculo();
            amostra.Descricao = "AE";

            var psq = new PesquisaTipoVeiculo();
            psq.Amostra = amostra;

            var r = DadosTipoVeiculo.Pesquisar(psq, Contexto);
            grdDados.DataContext = r;


        }

        private void btnJuncoes_Click(object sender, RoutedEventArgs e)
        {
            var psq = new PesquisaVeiculo();
            psq.Juncoes.Add(new Juncao("Tipo", "Codigo,Descricao"));

            var r = DadosVeiculo.Pesquisar(psq, Contexto);
            grdDados.DataContext = r;



        }
    }
}
